﻿/*===================================================
* CLR版本  : 4.0.30319.42000 
* 类名称   : IDGenerater
* 文 件 名 : IDGenerater 
* 类描述   :
* 创建人   : oream
* 创建时间 : 2018/3/4 0:41:59
* 修改人   : 
* 修改时间 :
* 版本： @version 1.0
=====================================================*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Model
{
  public class TimeHelper
  {
    private static readonly long epoch = new DateTime(1997, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;

    /// <summary>
    /// 客户端时间
    /// </summary>
    /// <returns></returns>
    public static long ClientNow()
    {
      return (DateTime.Now.Ticks - epoch) / 10000;
    }
    /// <summary>
    /// 客户端当前的秒数
    /// </summary>
    /// <returns></returns
    public static long ClientNowSeconds()
    {
      // 10000000 tick 相当于 1秒
      return (DateTime.Now.Ticks - epoch) / 10000000;
    }

    /// <summary>
    /// 登陆前是客户端时间,登陆后是同步过的服务器时间
    /// </summary>
    /// <returns></returns>
    public static long Now()
    {
      return ClientNow();
    }
  }


  public static class IDGenerater
  {
    /// <summary>
    /// 应用ID
    /// </summary>
    public static long AppId;

    /// <summary>
    /// 值
    /// </summary>
    public static ushort value;


    /// <summary>
    /// 生成ID
    /// </summary>
    /// <returns></returns>
    public static long GenerateId()
    {
      long time = TimeHelper.ClientNowSeconds();

      return (AppId << 48) + (time << 16) + ++value;
    }
  }
}
